package cn.gobang.action;


import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.ParentPackage;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;


import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.interceptor.ApplicationAware;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import org.apache.struts2.interceptor.SessionAware;

import cn.gobang.service.UserService;
import cn.gobang.util.ResultUtils;

@ParentPackage("struts-default")
@Namespace("/")
@Controller
@Scope("prototype")
public class UserAction implements SessionAware,ServletResponseAware,ApplicationAware,ServletRequestAware{
    
    @Resource
    private UserService userService;
    
    /**
     * 用户注册的游戏名
     */
    private String username;
    /**
     * 响应给用户的信息
     */
    private String message;
    /**
     * HttpSession对象
     */
    private Map<String, Object> session;
    /**
     *用作Json响应给用户的信息
     */
    private Map<String,String> map=new HashMap<String,String>();
    /**
     * HttpServletResponse对象
     */
	private HttpServletResponse response;
	/**
	 *Application对象
	 */
	 private Map<String, Object> application;
	/**
	 * HttpServletRquest对象
	 */
	  private HttpServletRequest request;
	 
    public String getMessage() {
        return message;
    }
    public void setMessage(String message) {
        this.message = message;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    
    @Action(value="regist")
    public void execute() throws IOException{
        
            if(username==null || username.trim().equals("")){
            	 map.put("res", "游戏名不能为空");
            	 ResultUtils.toJson(response, map);
            }
            
            //依次判断application中是否已经有该注册的昵称
            List<String[]> lists = (List<String[]>)application.get("userlists");
            if(lists==null){
       		 //Application集合的原型
       		 List<String[]> ls=new ArrayList<String[]>();
       		 application.put("userlists",ls);
            }
            lists = (List<String[]>)application.get("userlists");
            for(int lindex=0;lindex<lists.size();lindex++){//循环外层List
            	String[] each=lists.get(lindex);
            	for(int iindex=0;iindex<each.length-1;iindex++){//循环内部String[],无需比较第三个，应为string[]存储数据的形式是{"用户1"，"用户2","状态码"}
            		if(username.equals(each[iindex])){
            			//说明已经该用户名已经有人注册了
            			 map.put("res", "该游戏名已经有玩家使用了，请更改一个");
                    	 ResultUtils.toJson(response, map);
            		}
            	}
            }
            int index=0;//记录用户进入的循序，默认是第一个
            //声明一个8个大小的数组,表示用户的状态，含义分别为第一个用户，第二个用户，目前该第几个用户（0，表示第一个，1，表示第二个），目前的x值，目前的y值，目前是谁赢了,第一个用户的棋盘情况,第二个用户的棋盘情况
            String[] status=new String[]{"","","0","","","","",""};
            
            //如果没有还没有用户注册这个昵称，就把这个用户名注册到最末一个
            if(lists.size()==0){//表示这个第一个用户
            	status[0]=username;
            	lists.add(0,status);
            }else{
            	//首先获得最末的数组
            	String[] each=lists.get(lists.size()-1);
            	if("".equals(each[0])){//表明第一个空着
            		status=each;
            		status[0]=username;
            		lists.set(lists.size()-1, status);
            	}else if("".equals(each[1])){//表明第一个填满了，但是第二个空着
            		status=each;
            		status[1]=username;
            		lists.set(lists.size()-1,status);
            		index=1;//改变用户的位置,标记这个用户的位置为第二个
            	}else{//表明第一个和第二个都满着,把数据添加到下一个List上
            		status[0]=username;
            		lists.add(lists.size(),status);
            	}
            }
            //将名称存储到session中
            session.put("username", username);
            session.put("colororder", index);
            
            //打印一下application中的情况
//            List<String[]> listss = (List<String[]>)application.get("userlists");
//            for(int i=0;i<lists.size();i++){
//            	for(int j=0;j<lists.get(i).length;j++){
//            		System.out.print(lists.get(i)[j]+" ");
//            	}
//            	System.out.print("\n");
//            }
         map.put("res", "1");
       	 ResultUtils.toJson(response, map);
            
    }
	public void setSession(Map<String, Object> session) {
		this.session=session;
	}
	public void setServletResponse(HttpServletResponse response) {
		this.response=response;
	}
	public void setApplication(Map<String, Object> application) {
		this.application=application;
	}
	public void setServletRequest(HttpServletRequest request) {
		this.request=request;
	}
}
